package MyOop04;

import java.util.Arrays;

public class StudentTest {
    public static void main(String[] args) {
//        定义一个长度为3的数组，数组存储1~3名学生对象作为初始数据，学生的对象的学号，姓名各不相同。
//        学生的属性：学号，姓名，年龄
//        要求1：再次添加一个学生对象，并在添加的时候进行学号的唯一性判断。
//        要求2：添加完毕之后，遍历所有学生。

//        要求3：通过id删除学生信息
//                如果存在,则删除如果不存在，则提示删除失败。
//        要求4：删除完毕之后，遍历所有学生信息。
//        要求5：查询数组id为"002"的学生，如果存在，则将他的年龄+1岁。
        //创建一个student类
        //创建一个数组用来存储学生对象
        Student[] students = new Student[3];
        //创建学生对象并添加到数组中去
        Student student1 = new Student(001,"张三",20);
        Student student2 = new Student(002,"李四",21);
        Student student3 = new Student(003,"王二",22);
        students[0] = student1;
        students[1] = student2;
        students[2] = student3;
//        要求1：再次添加一个学生对象，并在添加的时候进行学号的唯一性判断。
        //先创建一个被添加的学生对象
        Student student4 = new Student(004,"麻子",23);

        //学号唯一性判断
        boolean flag = contains(students, student4.getId());
        if ( flag ==true){
            //已存在，不用添加
            System.out.println("学生已存在，请重新输入");
        }else {
            //不存在，添加
            /* 判断数组是否是满的：满的，需要扩容老数组---》在添加
                        没满：判断数组里有几个，在添加*/
            int count = getCount(students);
            if (count==students.length){
                //存满
                Student[] newStudent =creatNewStudent(students);
                newStudent[count] = student4;
                printStudent(newStudent);
            }else {
               //不满
                students[count] = student4;
                printStudent(students);
            }
        }
        //        要求3：通过id删除学生信息
//                如果存在,则删除.如果不存在，则提示删除失败。
//        要求4：删除完毕之后，遍历所有学生信息。
        //判断是否存在，
        //通过数组索引来进行
        int index = getIndex(students,004);
        if (index>=0){
            students[index] = null;
            printStudent(students);
        }else {
            System.out.println("不存在，删除失败");
            printStudent(students);
        }
        //        要求5：查询数组id为"002"的学生，如果存在，则将他的年龄+1岁。
        /*
        1.先判断是否存在:  存在  ： 年龄+1
                        不存在 提示重新输入
         */
        int index1 = getIndex(students,002);
        if (index1>=0){
            //年龄加1
            int age1 = students[index1].getAge()+1;
            students[index1].setAge( age1) ;
            printStudent(students);
        }else {
            System.out.println("不存在");
        }


    }

    //定义一个方法用来查找索引
    //需要数组和id ，并且需要返回值
    public static int getIndex(Student[] students ,int id){
        for (int i = 0; i < students.length; i++) {
            Student stu = students[i];
            if (stu != null){
                int sid = stu.getId();
                if (sid==id){
                    return i ;
                }
            }
        }
        //当循环结束之后，没有找到就表示不存在
        return -1;
    }


    //定义一个方法用来遍历数组
    //需要数组参数
    public static void printStudent(Student[] students){
        for (int i = 0; i <students.length ; i++) {
           Student stu = students[i];
           if (stu!=null){
               System.out.println(stu.getId()+" "+stu.getName()+" "+ stu.getAge());
           }
        }
    }

    //定义一个方法用来创建一个新数组 = 老数组长度+1
    //需要老数组,需要返回个数组
    public static Student[] creatNewStudent(Student[] students){
       Student[] newStudent = new Student[students.length+1];
        for (int i = 0; i < students.length; i++) {
            newStudent[i] = students[i];
        }
        return newStudent;
    }

    /* 判断数组是否是满的：满的，需要扩容老数组---》在添加
                        没满：判断数组里有几个，在添加*/
    //定义一个方法，判断数组里有几个元素，需要数组，需要结果
    public static int getCount(Student[] students){
        int count = 0;
        for (int i = 0; i < students.length; i++) {
            if (students[i] != null){
                count++;
            }
        }
        return count;
    }

    //定义一个方法判断唯一性，需要用到数组，id，并且需要结果
    public static boolean contains(Student[] students,int id){
        for (int i = 0; i < students.length; i++) {
            //获取数组数据，并比较
            Student stu = students[i];
            int sid = stu.getId();
            if (sid==id){
                return true;
            }
        }
        return false;
    }

}
